<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 1
    // //全局 i 就是1 
    for (var i = 1; i <= 5; i++) {
        //自执行函数
        (function (i) {
            console.log(i);
            setTimeout(function timer() {
                // console.log(i);
            }, i * 1000)
        })(i)
    }
    console.log(i); //输出6 计算属性在之后执行有延迟


// 2
    var obj1 = {a:1,b:2,c:3,d:{e:4}};
    var obj2 = {...obj1};
    obj1.a = 2;
    obj1.d.e = 5
    console.log(obj2);//a不变b改变   a属于基本数据类型所以存储的数据放在栈里面  b复杂数据类型存在堆里面用栈中地址引用堆中数据改变栈指向那个值改变

    //3  

            setTimeout(() => {//宏任务异步最后
            console.log(1);
        }, 0)
        new Promise((resolve, reject) => {//微任务第二
            console.log(2);  //这里是同步
            resolve()
        }).then(() => {
            console.log(4);//微任务回调第三走
        })
        console.log('这里是同步');//主线程先走



        //4.
        let arr = [12, 24, 37, 37, 24, 49, 49, 55, 55]  //去重

       //  es6新办法 new Set() array.from(*)
        let oneArr = Array.from(new Set(arr))
        console.log(oneArr);

       //  filter indexOf
        let twoArr = arr.filter((item, i) => {
            return arr.indexOf(item) == i
            console.log(arr.indexOf(12));
        });
        console.log(twoArr);

       // forEach indexOf  注意forEach没有返回值
        let sanArr = []
        arr.forEach((item, i) => {
            if (arr.indexOf(item) == i) {
                sanArr.push(item)
            }
        })
        console.log(sanArr);
</script>

</html>